#include<iostream>
#include<string.h>
#include<queue>
#include<tuple>
#include<unordered_set>
#pragma warning(disable:4996)
using namespace std;
//773.滑动谜题
//将二维数组转化为字符串处理
class Solution {
private:
    vector<vector<int>> neighbors = { {1,3},{0,2,4},{2,5},{0,4},{1,3,5},{2,4} };
    //3*2的数组转化为字符串后可以由0-5的索引表示，通过neighbors的二维数组表示每一格的相邻格
public:
    int slidingPuzzle(vector<vector<int>>& board) {
        auto get = [&](string& status)->vector<string> {
            //[&]表示以引用捕获所有自由变量。这意味着在 lambda 表达式内部
            //可以修改外部作用域中这些变量的值，并且这些修改会反映到外部作用域的变量上
            //->vector<string>是匿名函数返回的数据类型
            vector<string> res;
            int x = status.find('0');
            for (int i : neighbors[x]) {
                swap(status[i], status[x]);
                res.push_back(status);
                swap(status[i], status[x]);
            }
            return res;
        };
        //定义了一个匿名函数get，获取传入状态下一阶段所有可能的状态
        string start;
        for (int i = 0; i < 2;i++) {
            for (int j = 0; j < 3; j++) {
                start += board[i][j]+'0';
            }
        }
        //将数组转化为字符串
        if (start == "123450")
            return 0;
        queue<pair<string, int>> q;
        //pair定义几个数据类型形成一个新的数据类型
        q.emplace(start, 0);
        //因为pair类型比较复杂，用push会报错
        unordered_set<string> seen;
        while (!q.empty()) {
            pair<string,int> temp = q.front();
            string status = temp.first;
            int step = temp.second;
            q.pop();
            for (auto next_status : get(status)) {
                if (next_status == "123450")
                    return step + 1;
                if (!seen.count(next_status)) {
                    q.emplace(next_status, step + 1);
                    seen.insert(move(next_status));
                    //unordered_set通过insert传入新元素
                    //unordered_map直接 名称[键]++;来改变数值
                }
            }
        }
        return -1;
    }
};
int main() {
    Solution awa;
    //freopen("q.txt", "r", stdin);
    vector<vector<int>> a(2,vector<int>(3));
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> a[i][j];
        }
    }
    cout << awa.slidingPuzzle(a) << endl;
    return 0;
}